# 5.3. Global Map 全局地图

这里介绍 module/map/map_base.pyCampaignBase 全局地图(Global Map).

# 初始化全局地图

每次进入地图都需要初始化,重置地图信息

self.map = map_  # 来自地图文件的定义
self.map.reset()
self.map.load_map_data(use_loop=self.map_is_clear_mode)
self.map.load_spawn_data(use_loop=self.map_is_clear_mode)
self.map.load_mechanism(land_based=self.config.MAP_HAS_LAND_BASED)
self.map.grid_connection_initial(
    wall=self.config.MAP_HAS_WALL,
    portal=self.config.MAP_HAS_PORTAL,
)

# update()

将局部地图合并至全局地图中,并检查属性是否正确,否则记为错误。若错误数量超过 2,不会合并,同时返回 False。

检查规则非常啰嗦,建议直接看 module/map_detection/grid_info.py GridInfo.merge(),大致规则是 is_XXX 只能合并到 may_XXX 的点上。比如局部地图中的 is_enemy 只能合并在全局地图中 may_enemy 的点上,否则记为错误。

  • grids 局部地图,View 对象

  • camera 当前镜头对准的格子

  • mode 更新模式,一般是 normal

    踩问号遇到运输船时,使用 carrier。运输船只会刷新在无刷新事件的点(--

# grid_connection_initial()

连接所有相邻的网格,用于寻路

  • wall 是否有墙的阻隔,有就引入 wall_data
  • portal 是否有传送门,有就引入 portal_data

# show()

在 log 里展示当前地图的信息,例如

INFO |     A  B  C  D  E  F  G  H
INFO |  1 -- ++ -- -- -- 3L -- --
INFO |  2 MY ++ ++ MY -- -- 2M --
INFO |  3 Fl -- FL -- -- -- == MY
INFO |  4 -- 2L -- -- -- 2M ++ ++
INFO |  5 -- -- -- 2L -- == ++ ++

# show_cost()

INFO |       A    B    C    D    E    F    G    H
INFO |  1    4 9999    4    3    4    5    8    7
INFO |  2    3 9999 9999    2    3    4    5    6
INFO |  3    2    1    0    1    2    3    4    5
INFO |  4    3    2    1    2    3    4 9999 9999
INFO |  5    4    3    2    3    4    5 9999 9999

# show_connection()

INFO |     A  B  C  D  E  F  G  H
INFO |  1 A2    D1 D2 D1 E1 H1 H2
INFO |  2 A3       D3 D2 E2 F2 H3
INFO |  3 B3 C3    C3 D3 E3 F3 G3
INFO |  4 A3 C4 C3 C4 D4 E4      
INFO |  5 B5 C5 C4 C5 E4 E5      

# reset(self)

重置所有地图信息

# reset_fleet(self)

# find_path_initial(self, location, has_ambush=True)

# find_path_initial_multi_fleet(self, location_dict, current, has_ambush)

# find_path(self, location, step=0)

# missing_get(self, battle_count, mystery_count=0, siren_count=0, carrier_count=0, mode='normal')

# missing_is_none(self, battle_count, mystery_count=0, siren_count=0, carrier_count=0, mode='normal')

# missing_predict(self, battle_count, mystery_count=0, siren_count=0, carrier_count=0, mode='normal')

# select(self, **kwargs)